# -*- coding:utf-8 -*-
# 北梦测教育
# 课程咨询加微信：xiaobeiceshi
import configparser
from config.config import environment_ini_path, message_ini_path
from utils.decorator import singleton


# 单例模式
# 该类属于文件操作的类，在读取mysql配置文件，消息通知文件都会使用到
# 可以考虑使用单例模式


@singleton
class GetConfig:
    def __init__(self):
        self.cfg = configparser.ConfigParser()

    def get_database_data(self, database):
        """获取mysql所有的节点和值"""
        self.cfg.read(environment_ini_path, encoding="utf-8")

        # 如果想要使用这种方式，保证必须是[()]
        data = dict(self.cfg.items(database))
        data["port"] = int(data["port"])
        return data

    def get_base_url(self, url):
        """获取基础的不同的环境的url"""
        self.cfg.read(environment_ini_path, encoding="utf-8")
        data = dict(self.cfg.items(url))
        return data.get("base_url")

    # 以下为什么会写这么多的方法，而不是写一个方法来返回所有的配置
    # 1.因为在公司内部实际情况不会有这么多的消息通知方式，一般只有一种
    # 2.我们写方法的时候原则上来讲，为了代码的低耦合，尽量一个方法实现一个功能
    def get_message_dingding(self):
        """获取钉钉消息通知相关的配置"""
        self.cfg.read(message_ini_path, encoding="utf-8")
        data = dict(self.cfg.items("dingding"))
        return data

    def get_message_wechat(self):
        """获取企业微信消息通知相关配置"""
        self.cfg.read(message_ini_path, encoding="utf-8")
        data = dict(self.cfg.items("wechat"))
        data['headers'] = eval(data['headers'])
        return data

    def get_message_email(self):
        """获取邮箱通知相关配置"""
        self.cfg.read(message_ini_path, encoding="utf-8")
        data = dict(self.cfg.items("email"))
        data['recipients'] = eval(data['recipients'])
        return data

    def get_message_report_path(self):
        """获取消息通知报告路径相关配置"""
        self.cfg.read(message_ini_path, encoding="utf-8")
        data = dict(self.cfg.items("report"))
        return data


if __name__ == '__main__':
    c1 = GetConfig()
    print(c1.get_database_data("test_database"))
    print(c1.get_base_url("test_base_url"))
